keepalived 检测服务状态、keepalived 检测脚本

您所在的位置:网站首页 keep-alive nginx keepalived 检测服务状态、keepalived 检测脚本

keepalived 检测服务状态、keepalived 检测脚本

#keepalived 检测服务状态、keepalived 检测脚本| 来源: 网络整理| 查看: 265

前言

环境:centos 7.9 keepalived-2.2.7

说明

前面我们模拟vip漂移,总是把keepalived手动停止来模拟服务器死机,这种模拟是不太合理的,在生产环境中,我们更多的是监控某一个服务的状态,根据服务的状态来实现vip的漂移,比如,检测nginx是否存活,不存活则实现vip漂移到备服务器上,从而实现真正的高可用。

下面,我们将手写keepalived的检测脚本,用于检测nginx是否存活,不存活则实现vip漂移到备服务器上。

nginx检测脚本 #脚本含义是:nginx检测没了,直接干掉keepalived,这样备收不到心跳包就会接管vip了 vim /etc/check_nginx.sh #!/bin/bash #计算nginx进程数量 #注意:千万不要使用ps -ef | grep nginx | grep -v grep | wc -l 进行统计。这样统计会有问题的 n=`ps -C nginx --no-heading|wc -l` #当nginx停止后,直接干掉keepalived,这样备收不到心跳包就会接管vip了 if [ $n -eq "0" ]; then /usr/bin/systemctl stop keepalived fi

对脚本授予可执行权限:chmod a+x /etc/check_nginx.sh;

#将检测脚本复制一份到backup服务器上 scp /etc/keepalived/check_nginx.sh [email protected]:/etc/keepalived/check_nginx.sh #登录backup服务器给脚本授权 chmod a+x /etc/keepalived/check_nginx.sh 修改master主配置文件

配置master主节点,主要加了vrrp_script {}段和 track_script{}段,如下所示:

#配置master主节点 [root@master~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id LB1 #keepalived服务器的路由标识,用于标识机器的,默认值是主机名 vrrp_skip_check_adv_addr #保持默认参数 vrrp_strict #保持默认参数 vrrp_garp_interval 0 #保持默认参数 vrrp_gna_interval 0 #保持默认参数 } vrrp_script check_nginx { #定义要检测的脚本,check_nginx是指定的检测脚本名称 script /etc/keepalived/check_nginx.sh #指定哪个脚本,定义脚本路径 interval 2 #脚本检测的时间间隔,表示每n秒就检查一次,默认1秒就检测一次 timeout 2 #脚本检测超时时间,超过这个时间则认为检测失败 #通过此权重调整优先级,(默认值:0) #有关反转的描述,请参见track_script。 #'weight 0 reverse' 将在脚本启动时导致vrrp实例关闭,反之亦然。 weight 0 #这个参数会调整优先级的,保持默认值0吧 rise 2 # 表示需要连续成功2次才能认为是成功的 fall 2 # 表示需要连续失败2次才能认为是失败的 user root # 指定哪个用户指定脚本 init_fail #设置默认脚本最初为失败状态,监测成功之后再转换为成功状态 } vrrp_instance VI_1 { #VT_1是实例名,可以自定义,建议主备的实例名保持一致,让人一眼就知道这两个是一对的 state MASTER #配置为MASTER,state:有两种状态MASTER、BACKUP,谁为主节点是由prority决定,并不是由state决定 interface ens33 # vip绑定的网卡 virtual_router_id 51 #虚拟路由id,用于标识一个唯一的实例,master和backup该标识必须相同,用于表示他两是一组的 priority 100 #优先级设为100,优先级用于确定谁具有vip,谁就是主节点 advert_int 1 #心跳包的时间间隔,默认就是1秒就发一次 authentication { #主备之间的认证信息 auth_type PASS #认证类型,默认PASS auth_pass 1111 #认证密码 } track_script { #指定要检测的脚本 check_nginx #指定我们定义的要检查的脚本名称 } virtual_ipaddress { 192.168.118.100 #vip地址 } } [root@master~]# 修改backup备配置文件

backup的keepalived配置文件与master的一样,也是要加了vrrp_script {}段和 track_script{}段,如下:

#配置BACKUP主节点 [root@master~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id LB2 #keepalived服务器的路由标识,用于标识机器的,默认值是主机名 vrrp_skip_check_adv_addr #保持默认参数 vrrp_strict #保持默认参数 vrrp_garp_interval 0 #保持默认参数 vrrp_gna_interval 0 #保持默认参数 } vrrp_script check_nginx { #定义要检测的脚本,check_nginx是指定的检测脚本名称 script /etc/keepalived/check_nginx.sh #指定哪个脚本,定义脚本路径 interval 2 #脚本检测的时间间隔,表示每n秒就检查一次,默认1秒就检测一次 timeout 2 #脚本检测超时时间,超过这个时间则认为检测失败 #通过此权重调整优先级,(默认值:0) #有关反转的描述,请参见track_script。 #'weight 0 reverse' 将在脚本启动时导致vrrp实例关闭,反之亦然。 weight 0 #这个参数会调整优先级的,保持默认值0吧 rise 2 # 表示需要连续成功2次才能认为是成功的 fall 2 # 表示需要连续失败2次才能认为是失败的 user root # 指定哪个用户指定脚本 init_fail #设置默认脚本最初为失败状态,监测成功之后再转换为成功状态 } vrrp_instance VI_1 { #VT_1是实例名,可以自定义,建议主备的实例名保持一致,让人一眼就知道这两个是一对的 state BACKUP #配置为BACKUP,state:有两种状态MASTER、BACKUP,谁为主节点是由prority决定,并不是由state决定 interface ens33 # vip绑定的网卡 virtual_router_id 51 #虚拟路由id,用于标识一个唯一的实例,同时主备应该保持一致,用于表示他两是一组的 priority 50 #设的比master的优先级低,优先级用于确定谁具有vip,谁就是主节点 advert_int 1 #心跳包的时间间隔,默认就是1秒就发一次 authentication { #主备之间的认证信息 auth_type PASS #认证类型,默认PASS auth_pass 1111 #认证密码 } track_script { #指定要检测的脚本 check_nginx #指定我们定义的要检查的脚本名称 } virtual_ipaddress { 192.168.118.100 #vip地址 } } 验证

1、都重启主备的keepalived服务和nginx服务;

#查看主节点,现在nginx是启动状态的 [master keepalived]# systemctl status nginx | grep Active Active: active (running) since Sat 2022-10-15 19:10:14 CST; 7min ago [root@master ~]# #主节点的keepalived也是启动状态的 [root@master ~]# systemctl status keepalived.service | grep Active Active: active (running) since Sat 2022-10-15 19:14:54 CST; 2min 53s ago [root@master ~]# #vip在主节点上(已经确认备节点没有vip) [root@master ~]# ip a| grep '192.168.118.100' inet 192.168.118.100/32 scope global ens33 [root@master ~]# #停掉主节点上的nginx,这是keepalived根据检测脚本发现nginx停了立马干点keepalived, # 这样备收不到心跳包就会接管vip了 [root@master ~]# systemctl stop nginx [root@master ~]# ip a | grep '192.168.118.100' #vip 已经不在主节点上了 [root@master ~]# systemctl status keepalived.service | grep Active #keepalive已经停止了,因为我们的检测脚本杀死的 Active: inactive (dead) [root@master ~]# # 先vip在备节点上 [root@backup ~]# ip a| grep '192.168.118.100' inet 192.168.118.100/32 scope global ens33 [root@backup ~]# #重新启动主节点上的nginx进程和keepalived服务,vip又被主节点抢占回来了 [root@master ~]# systemctl start nginx.service [root@master ~]# systemctl start keepalived.service [root@master ~]# ip a| grep '192.168.118.100' inet 192.168.118.100/32 scope global ens33 [root@master ~]#


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3